home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 21 / Cream of the Crop 21 (Terry Blount) (October 1996).iso / editor / auror300.zip / COUNTLIN.AML < prev    next >
Text File  |  1996-07-17  |  4KB  |  149 lines

  1. //--------------------------------------------------------------------
  2. // COUNTLIN.AML
  3. // Count Lines in Multiple Files, (C) 1993-1996 by nuText Systems
  4. //
  5. // (See Countlin.dox for user help)
  6. //
  7. // This macro counts the total number of lines and blank lines in
  8. // multiple files on disk. You will be prompted to enter a directory or
  9. // filespec.
  10. //
  11. // Usage:
  12. //
  13. // Select this macro from the Macro List (on the Macro menu), or run it
  14. // from the macro picklist <shift f12>.
  15. //--------------------------------------------------------------------
  16.  
  17. // compile time macros and function definitions
  18. include bootpath "define.aml"
  19.  
  20. // disable <loading> in Ext.aml while this macro is running
  21. event <loading> end
  22.  
  23. // inherit from the 'popup' object
  24. settype "popup"
  25.  
  26. // create status window
  27. private function createstatus (filespec)
  28.   createwindow
  29.   setframe ">b"
  30.   setcolor  border_color   color white on gray
  31.   setcolor  text_color     color black on gray
  32.   settitle "Counting lines in '" + (onname filespec 't') + "'" 'c'
  33.   setborder "1i"
  34.   setshadow 2 1
  35.  
  36.   // center the window
  37.   width = 70
  38.   height = 16
  39.   ox = (getvidcols - width) / 2
  40.   oy = (getvidrows - height) / 2
  41.   sizewindow ox oy ox + width oy + height "ad"
  42.  
  43.   // write header line
  44.   writestr "Total lines   Blank lines" (color black on gray) (getcoord 'x1') - 25
  45. end
  46.  
  47. // macro help
  48. macrofile = arg 1
  49. function <f1>
  50.   helpmacro macrofile
  51. end
  52.  
  53. // get filespec to count
  54. filespec = ask "Enter filespec where lines should be counted"
  55.  
  56. if not filespec then
  57.   return
  58. end
  59. // <enter> was pressed
  60. if filespec == ' ' then
  61.   filespec = "*.*"
  62. end
  63.  
  64. filespec = onname (qualify filespec (getbufname))
  65. path = getpath filespec
  66.  
  67. // initialize total lines and blank lines to zero
  68. totallines = 0
  69. totalblank = 0
  70.  
  71. // create result buffer initialize the first line
  72. resultbuf = createbuf
  73. ovltext "≡≡≡≡≡≡ Select this line to edit line counts ≡≡≡≡≡≡"
  74.  
  75. // load the directory
  76. if not (loadbuf filespec '' '' 'hvs' + _NameStyle) or
  77.    not getlinelen then
  78.   destroybuf resultbuf
  79.   display
  80.   say filespec + " not found" 'b'
  81.   return
  82. end
  83.  
  84. // sort by name
  85. sortblock '' '*a'
  86.  
  87. // create progress window
  88. createstatus filespec
  89.  
  90. // count lines for all files in the directory
  91. repeat
  92.   file = path + gettext
  93.   if loadbuf file  then
  94.     lines = getlines
  95.     totallines = totallines + lines
  96.     blanklines = find "^ *$" "x*a"
  97.     totalblank = totalblank + blanklines
  98.     status = (thousands (if? lines lines '0')):7 +
  99.              (thousands (if? blanklines blanklines '0' )):14
  100.  
  101.     writeline
  102.     writestr file
  103.     writestr status (color black on gray) (getcoord 'x1') - 21
  104.     display
  105.  
  106.     addline file:-52 + status '' '' resultbuf
  107.     destroybuf
  108.   end
  109. until not down
  110. breakoff
  111.  
  112. // destroy the directory
  113. destroybuf
  114.  
  115. // destroy the status window
  116. destroywindow
  117.  
  118. currbuf resultbuf
  119.  
  120. // insert line count totals into the result buffer
  121. insline '' '' 1
  122. insline "Total lines:            " + (thousands totallines) '' 2
  123. insline "Total non-blank lines:  " +
  124.         (thousands totallines - totalblank) '' 3
  125. insline "Blank lines:            " +
  126.         (totalblank * 100) / totallines + '%'  '' 4
  127. insline '' '' 5
  128. insline "File" + "":44 + "Total lines   Blank lines" '' 6
  129. insline "----" + "":44 + "-----------   -----------" '' 7
  130.  
  131. // display the results in a popup menu
  132. file = popup resultbuf "Line counts for '" + filespec + "'" 74 '' (getcurrobj)
  133. if file then
  134.  
  135.   // edit linecounts
  136.   if file [1] == '≡' then
  137.     delline 1 1 resultbuf
  138.     setbufname (qualify "lines.txt" (getbufname (getwinbuf))) resultbuf
  139.     openbuf resultbuf
  140.     return
  141.   end
  142.  
  143.   // open the selected file
  144.   if file [2] == ':' then
  145.     open file [1 : (pos ' ' file) - 1]
  146.   end
  147. end
  148. destroybuf resultbuf
  149.